package models

import (
	"time"
)

// 用户表 (users)
type User struct {
	Id       uint   `gorm:"primaryKey;autoIncrement" json:"id"`
	LoginId  string `gorm:"type:enum('admin','author');default:'author'" json:"login_id"` // 角色
	Username string `gorm:"size:50;uniqueIndex;not null" json:"username"`                 // 用户名
	Password string `gorm:"size:255;not null" json:"password"`                            // 密码
	Email    string `gorm:"size:100;uniqueIndex;not null" json:"email"`                   // 邮箱

	DisplayName string `gorm:"size:100" json:"display_name"` //  昵称
	AvatarURL   string `gorm:"size:255" json:"avatar_url"`   // 头像
	Bio         string `gorm:"type:text" json:"bio"`         // 个人签名

	CreatedAt time.Time `json:"created_at"` // 创建时间
	UpdatedAt time.Time `json:"updated_at"` // 更新时间
}

type UserInfo struct {
	Id        uint      `json:"id"`
	LoginId   string    `json:"login_id"`   // 角色
	Username  string    `json:"username"`   // 用户名
	Password  string    `json:"password"`   // 密码
	Email     string    `json:"email"`      // 邮箱
	CreatedAt time.Time `json:"created_at"` // 创建时间
	UpdatedAt time.Time `json:"updated_at"` // 更新时间
}

// 嵌套结构体
type UserInfoBase struct {
	Username string `json:"username"` // 用户名
	Password string `json:"password"` // 密码
}

type ExtraInfo struct {
	Email       string `gorm:"size:100;uniqueIndex;" binding:"omitempty" json:"email"` // 邮箱
	DisplayName string `gorm:"size:100"   binding:"omitempty" json:"display_name"`     //  昵称
	AvatarURL   string `gorm:"size:255"   binding:"omitempty" json:"avatar_url"`       // 头像
	Bio         string `gorm:"type:text"  binding:"omitempty" json:"bio"`              // 个人签名
}
type CreateUserRequest struct {
	UserInfoBase
	LoginId   string    `json:"login_id"`
	CreatedAt time.Time `json:"created_at"` // 创建时间
	UpdatedAt time.Time `json:"updated_at"` // 更新时间
}

type LoginInfo struct {
	UserInfoBase
	LoginId string `json:"login_id"` //
}

type LoginBack struct {
	UserInfoBase
	Id         uint   `json:"id"`
	LoginId    string `json:"login_id"`
	Token      string `json:"token"`       // token
	ExpireTime int64  `json:"expire_time"` // 有效期
}

// 编辑的数据结构
// 指针类型 + 可选
type EditUserRequest struct {
	Username    *string `json:"username" binding:"omitempty"` // 用户名
	NewPassword *string `json:"new_password" binding:"omitempty"`
	Email       *string `gorm:"size:100;uniqueIndex;" binding:"omitempty" json:"email"` // 邮箱
	DisplayName *string `gorm:"size:100"   binding:"omitempty" json:"display_name"`     //  昵称
	AvatarURL   *string `gorm:"size:255"   binding:"omitempty" json:"avatar_url"`       // 头像
	Bio         *string `gorm:"type:text"  binding:"omitempty" json:"bio"`              // 个人签名

}
type EditUserBack struct {
	Username string `json:"username"` // 用户名
	LoginId  string `json:"login_id"` // 身份
	ExtraInfo
}
type UpdateUser struct {
	Username string `json:"username" binding:"omitempty"`
	Password string `json:"password" binding:"omitempty"`
	ExtraInfo
}
